﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using FluentValidation;
using FluentValidation.Results;
using System.Data.Entity.Infrastructure;
using RedeSocial.DataAccess;

namespace RedeSocial.ViewModels.Interfaces
{
	public interface IBaseViewModel : INotifyPropertyChanged, IDataErrorInfo
	{
		///// <summary>
		///// Gets or sets the entity framework data context that this view model will use.
		///// </summary>
		///// <value>
		///// The view model entity framework data context.
		///// </value>
		//RedeSocialEntities DataContext { get; set; }
		/// <summary>
		/// Gets or sets the default language.
		/// </summary>
		/// <value>
		/// The default language.
		/// </value>
		Language DefaultLanguage { get; set; }
		/// <summary>
		/// Gets or sets the fluent validation.
		/// </summary>
		/// <value>The fluent validation.</value>
		IValidator FluentValidator { get; set; }
		/// <summary>
		/// Gets or sets the validation result.
		/// </summary>
		/// <value>The validation result.</value>
		ValidationResult ValidationResult { get; set; }
		/// <summary>
		/// Checks if the entity is valid.
		/// For the entity to be valid all the defined rules must evaluate to true.
		/// </summary>
		/// <returns>True if all rules evaluate to True, otherwise False.</returns>
		bool IsValid();
		/// <summary>
		/// Validates this instance using FluentValidation.
		/// </summary>
		bool Validate();

	}
}
